#include "./micropython/py/dynruntime.h"

mp_obj_t _FSAPI_ChangeDir;
mp_obj_t _FSAPI_GetCurDir;
mp_obj_t _FSAPI_ListDir;
mp_obj_t _FSAPI_MakeDir;

static mp_obj_t init_FSAPI_ChangeDir(mp_obj_t func) {
    _FSAPI_ChangeDir = func;
    return mp_obj_new_bool(mp_obj_new_int(1));
}

static mp_obj_t init_FSAPI_GetCurDir(mp_obj_t func) {
    _FSAPI_GetCurDir = func;
    return mp_obj_new_bool(mp_obj_new_int(1));
}

static mp_obj_t init_FSAPI_ListDir(mp_obj_t func) {
    _FSAPI_ListDir = func;
    return mp_obj_new_bool(mp_obj_new_int(1));
}

static mp_obj_t init_FSAPI_MakeDir(mp_obj_t func) {
    _FSAPI_MakeDir = func;
    return mp_obj_new_bool(mp_obj_new_int(1));
}

mp_obj_t FSAPI_ChangeDirO(mp_obj_t path) {
    mp_obj_t args[1] = {path};
    return mp_call_function_n_kw(_FSAPI_ChangeDir, 1, 0, args);
}

mp_obj_t FSAPI_ChangeDir(char* path) {
    mp_obj_t args[1] = {mp_obj_new_str(path, strlen(path))};
    return mp_call_function_n_kw(_FSAPI_ChangeDir, 1, 0, args);
}

mp_obj_t FSAPI_GetCurDir() {
    mp_obj_t args[0] = {};
    return mp_call_function_n_kw(_FSAPI_GetCurDir, 0, 0, args);
}

mp_obj_t FSAPI_ListDirO(mp_obj_t path) {
    mp_obj_t args[1] = {path};
    return mp_call_function_n_kw(_FSAPI_ListDir, 1, 0, args);
}

mp_obj_t FSAPI_ListDir(char* path) {
    mp_obj_t args[1] = {mp_obj_new_str(path, strlen(path))};
    return mp_call_function_n_kw(_FSAPI_ListDir, 1, 0, args);
}

mp_obj_t FSAPI_MakeDirO(mp_obj_t path) {
    mp_obj_t args[1] = {path};
    return mp_call_function_n_kw(_FSAPI_MakeDir, 1, 0, args);
}

mp_obj_t FSAPI_MakeDir(char* path) {
    mp_obj_t args[1] = {mp_obj_new_str(path, strlen(path))};
    return mp_call_function_n_kw(_FSAPI_MakeDir, 1, 0, args);
}

#define CSDK_INIT_FSAPI_GLOBALS static MP_DEFINE_CONST_FUN_OBJ_1(O_FS_MD, init_FSAPI_MakeDir); static MP_DEFINE_CONST_FUN_OBJ_1(O_FS_CD, init_FSAPI_ChangeDir); static MP_DEFINE_CONST_FUN_OBJ_1(O_FS_GCD, init_FSAPI_GetCurDir); static MP_DEFINE_CONST_FUN_OBJ_1(O_FS_LD, init_FSAPI_ListDir);

#define CSDK_EXPORT_FSAPI_GLOBALS mp_store_global(MP_QSTR_regFS_MD, MP_OBJ_FROM_PTR(&O_FS_MD)); mp_store_global(MP_QSTR_regFS_CD, MP_OBJ_FROM_PTR(&O_FS_CD)); mp_store_global(MP_QSTR_regFS_GCD, MP_OBJ_FROM_PTR(&O_FS_GCD)); mp_store_global(MP_QSTR_regFS_LD, MP_OBJ_FROM_PTR(&O_FS_LD));
